﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Linq.Dynamic;
using middleware.webservice.dominio;

namespace middleware.webservice.entrada
{
    public class ServicioEntrada : IServicioEntrada
    {
        public int WSElementosSinLeer(string cadena, string sentencia)
        {
            int aRetornar=0;

            using (WSContexto contexto = new WSContexto(cadena))
            {
                try
                {
                    var query = from m in contexto.Mensajes
                                .Where(sentencia)
                                select m;
                    //Retorno la primera encontrada
                    aRetornar = query.Count();
                }
                catch (Exception e)
                {
                    string error = e.ToString();
                    aRetornar = -1;
                }
            }
            
            return aRetornar;
        }

        public Mensajes WSObtenerMensaje(string cadena, string sentencia)
        {
            //Habria que controlar la forma de seleccionar
            Mensajes aRetornar = new Mensajes();
                        
            using (WSContexto contexto = new WSContexto(cadena))
            {
                try
                {
                    var query = from m in contexto.Mensajes
                                .Include("Atributos")
                                .Where(sentencia)
                                select m;
                    //Retorno la primera encontrada
                    aRetornar = query.First();
                }
                catch (Exception e)
                {
                    string error = e.ToString();
                }
            }
            
            return aRetornar;
        }

        public void WSMarcarComoLeido(string cadena, Mensajes mensaje, string tipoSentencia, string sentencia)
        {
            //Habria que controlar el metodo de eliminar
            using (WSContexto contexto = new WSContexto(cadena))
            {
                try
                {
                    var query = from m in contexto.Mensajes
                               .Include("Atributos")
                               where m.MensajeId == mensaje.MensajeId
                               select m;

                    foreach (Mensajes mensajeAuxiliar in query)
                    {
                        //Controlo si hay que eliminarlo o actualizarlo
                        if (tipoSentencia.Equals("Update"))
                        { 
                            //Actualizo el campo
                            mensajeAuxiliar.Procesado = true;
                        }
                        else if (tipoSentencia.Equals("Delete"))
                            contexto.Mensajes.Remove(mensajeAuxiliar);//Borro el mensaje
                    }
                    contexto.SaveChanges();
                }
                catch (Exception e)
                {
                    string error = e.ToString();
                }
            }
        }
    }
}
